package com.situ.mall.common.service.impl;

import com.github.pagehelper.PageHelper;
import com.situ.mall.common.entity.Order;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.situ.mall.common.mapper.OrdersMapper;
import com.situ.mall.common.service.IOrdersService;
import com.situ.mall.common.util.OrderCodeUtil;
import com.situ.mall.common.vo.OrderVO;
import com.situ.mall.common.vo.ResultVO;
import com.situ.mall.common.vo.TableVO;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author author
 * @since 2024-01-29
 */
@Service
public class OrdersServiceImpl extends ServiceImpl<OrdersMapper, Order> implements IOrdersService {

    /* 后端请求 */
    //查询订单
    @Override
    public TableVO table(Integer page, Integer limit, String memberName, String workerName) {
        //PageHelper 分页小工具
        PageHelper.startPage(page, limit);
        //上边这行代码后跟的第一次查数据库是分页查询，只生效一次！！！
        List<OrderVO> list = baseMapper.backList(memberName, workerName);
        return TableVO.data(list);
    }

    //更新订单状态
    @Override
    public void update(Order order) {
        baseMapper.update(order);
    }


    /* 前端请求 */
    //生成订单
    @Override
    public ResultVO order(Integer orderTypeId, Integer memberId, String memberTel, String memberName, String memberDetail, LocalDate time, String hospital, Integer workerId, String price) {
        Order order = new Order();
        order.setOrderNumber(OrderCodeUtil.randomOrderCode()); // 生成订单号
        order.setStatus("-1"); // 指定订单状态
        order.setCreateTime(LocalDateTime.now()); // 生成创建时间
        order.setOrderTypeId(orderTypeId); // 订单类型
        order.setMemberId(memberId); // 下单用户id
        order.setMemberTel(memberTel); // 患者手机号
        order.setMemberName(memberName); // 患者姓名
        order.setMemberDetail(memberDetail); // 患者详情
        order.setClinicTime(time); // 就诊时间
        order.setHospital(hospital); // 就诊医院
        order.setMoney(new BigDecimal(price)); // 订单价格
        if (workerId != null) {
            order.setWorkerId(workerId);
        }
        baseMapper.order(order);
        //再查一遍
        Order o = baseMapper.selectByCode(order.getOrderNumber());
        return ResultVO.data(200, "请求成功", o);
    }

}
